/*-------------------------------------------------------------------------
 *
 * aclchk_internal.h
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/utils/aclchk_internal.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef ACLCHK_INTERNAL_H
#define ACLCHK_INTERNAL_H

#include "nodes/parsenodes.h"
#include "nodes/pg_list.h"

/*
 * 关于一个 Grant/Revoke 语句的内部格式信息：对象和被授予者名称已转换为 Oids，特权列表是一个 AclMode 位掩码。如果 'privileges' 是 ACL_NO_RIGHTS（0 值）且 all_privs 为真，则 'privileges' 将被内部设置为正确类型的 ACL_ALL_RIGHTS_*，具体取决于对象类型（注意 - 这将修改 InternalGrant 结构！）
 *
 * 注意：'all_privs' 和 'privileges' 仅表示对象级特权。
 * 可能还有列级特权规范，这些在 col_privs 中表示（这是一个未转换的 AccessPriv 节点列表）。
 * 列特权仅对对象类型 OBJECT_TABLE 有效。
 */
typedef struct
{
	bool		is_grant;
	ObjectType	objtype;
	List	   *objects;
	bool		all_privs;
	AclMode		privileges;
	List	   *col_privs;
	List	   *grantees;
	bool		grant_option;
	DropBehavior behavior;
} InternalGrant;


#endif							/* ACLCHK_INTERNAL_H */
